package com.example.pojo.dto;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import org.hibernate.validator.constraints.Length;

import java.util.Date;

/**
 * 用户数据传输对象 (DTO)
 * 
 * <p>用于接收前端传递的用户信息，并提供参数校验功能。
 * 配合@Validated注解使用，确保数据的完整性和格式正确性。</p>
 * 
 * <p><strong>校验注解说明：</strong></p>
 * <ul>
 *   <li><code>@NotBlank</code>: 验证字符串不能为空且不能只包含空白字符</li>
 *   <li><code>@Email</code>: 验证字符串是否为有效的邮箱格式</li>
 *   <li><code>@Length</code>: 验证字符串长度是否在指定范围内</li>
 * </ul>
 * 
 * <p><strong>校验注解详细说明：</strong></p>
 * <ul>
 *   <li><strong>@NotBlank(message = "用户名不能为空")</strong>
 *       <ul>
 *         <li>作用：验证字段不能为空且不能只包含空白字符</li>
 *         <li>与@NotEmpty的区别：@NotEmpty只检查是否为空，@NotBlank还会去除首尾空格后检查</li>
 *         <li>message属性：指定校验失败时的错误信息</li>
 *         <li>使用场景：适用于用户名、密码等必填字段</li>
 *       </ul>
 *   </li>
 *   <li><strong>@Email(message = "邮箱格式不正确")</strong>
 *       <ul>
 *         <li>作用：验证字符串是否符合邮箱格式</li>
 *         <li>正则表达式：使用标准的邮箱格式验证</li>
 *         <li>message属性：指定校验失败时的错误信息</li>
 *         <li>使用场景：适用于邮箱字段的格式验证</li>
 *       </ul>
 *   </li>
 *   <li><strong>@Length(min = 6, max = 12, message = "密码长度不对")</strong>
 *       <ul>
 *         <li>作用：验证字符串长度是否在指定范围内</li>
 *         <li>min属性：最小长度限制</li>
 *         <li>max属性：最大长度限制</li>
 *         <li>message属性：指定校验失败时的错误信息</li>
 *         <li>使用场景：适用于密码长度限制等场景</li>
 *       </ul>
 *   </li>
 * </ul>
 * 
 * <p><strong>其他常用校验注解：</strong></p>
 * <ul>
 *   <li><code>@NotNull</code>: 验证字段不能为null</li>
 *   <li><code>@NotEmpty</code>: 验证集合、数组、字符串不能为空</li>
 *   <li><code>@Min/@Max</code>: 验证数值的最小/最大值</li>
 *   <li><code>@Pattern</code>: 使用正则表达式验证字符串格式</li>
 *   <li><code>@Size</code>: 验证集合、数组的大小</li>
 * </ul>
 * 
 * @author 开发团队
 * @version 1.0
 * @since 2024-01-01
 * @see jakarta.validation.constraints.NotBlank
 * @see jakarta.validation.constraints.Email
 * @see org.hibernate.validator.constraints.Length
 */
public class UserDto {
    /** 用户ID，用于修改和删除操作 */
    private Integer id;
    
    /** 
     * 用户名
     * 使用@NotBlank注解确保用户名不能为空且不能只包含空白字符
     */
    @NotBlank(message = "用户名不能为空")
    private String userName;
    
    /** 
     * 用户密码
     * 使用@NotBlank确保密码不为空，@Length限制密码长度在6-12位之间
     */
    @NotBlank(message = "密码不能为空")
    @Length(min = 6, max = 12, message = "密码长度不对")
    private String password;
    
    /** 
     * 用户邮箱
     * 使用@Email注解验证邮箱格式的正确性
     */
    @Email(message = "邮箱格式不正确")
    private String email;
    
    /** 用户手机号 */
    private String phone;
    
    /** 用户唯一标识符 */
    private String userId;
    
    /** 用户创建时间 */
    private Date createTime;
    
    /** 用户更新时间 */
    private Date updateTime;


    // 快捷建 按下Alt + Insert（Windows/Linux 系统）或Command + N（Mac 系统）快捷键，在弹出的菜单中选择Getter 。


    public String getUserName() {
        return userName;
    }

    public void setUserName(String username) {
        this.userName = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public Date getCreateTime() {
        return createTime;
    }

    /**/
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }


    public String toString() {
        return "UserDto{" +
                "username='" + userName + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", phone='" + phone + '\'' +
                ", userId='" + userId + '\'' +
                ", createTime=" + createTime +
                ", updateTime=" + updateTime +
                '}';
    }
}
